home *** CD-ROM | disk | FTP | other *** search
- /* This file is part of the KDE project
- Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
- Copyright (C) 2000, 2001, 2002 David Faure <david@mandrakesoft.com>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
- #ifndef __konq_iconviewwidget_h__
- #define __konq_iconviewwidget_h__
-
- #include <kiconloader.h>
- #include <kiconview.h>
- #include <kurl.h>
- #include <qguardedptr.h>
- #include <kfileitem.h>
- #include <kio/jobclasses.h>
- #include <libkonq_export.h>
-
- class KonqFMSettings;
- class KFileIVI;
- class KonqIconDrag;
- namespace KIO { class Job; }
-
- /**
- * A file-aware icon view, implementing drag'n'drop, KDE icon sizes,
- * user settings, animated icons...
- * Used by kdesktop and konq_iconview.
- *
- */
- class LIBKONQ_EXPORT KonqIconViewWidget : public KIconView
- {
- Q_OBJECT
- Q_PROPERTY( bool sortDirectoriesFirst READ sortDirectoriesFirst WRITE setSortDirectoriesFirst )
- Q_PROPERTY( QRect iconArea READ iconArea WRITE setIconArea )
- Q_PROPERTY( int lineupMode READ lineupMode WRITE setLineupMode )
- Q_PROPERTY( QString url READ urlString WRITE setNewURL )
-
- friend class KFileIVI;
-
- public:
-
- enum LineupMode { LineupHorizontal=1, LineupVertical, LineupBoth };
-
- /**
- * Constructor
- */
- KonqIconViewWidget( QWidget *parent = 0L, const char *name = 0L, WFlags f = 0, bool kdesktop = FALSE );
- virtual ~KonqIconViewWidget();
-
- /**
- * Read the configuration and apply it.
- * Call this in the inherited constructor with bInit=true,
- * and in some reparseConfiguration() slot with bInit=false.
- * Returns true if the font was changed (which means something has to
- * be done so that the icon's texts don't run into each other).
- * However Konq and KDesktop handle this differently.
- */
- bool initConfig( bool bInit );
-
- /**
- * Set the area that will be occupied by icons. It is still possible to
- * drag icons outside this area; this only applies to automatically placed
- * icons.
- */
- void setIconArea( const QRect &rect );
-
- /**
- * Reimplemented to make the slotOnItem highlighting work.
- */
- virtual void focusOutEvent( QFocusEvent * /* ev */ );
-
- /**
- * Returns the icon area.
- */
- QRect iconArea() const;
-
- /**
- * Set the lineup mode. This determines in which direction(s) icons are
- * moved when lineing them up.
- */
- void setLineupMode(int mode);
-
- /**
- * Returns the lineup mode.
- */
- int lineupMode() const;
-
- /**
- * Line up the icons to a regular grid. The outline of the grid is
- * specified by iconArea. The two length parameters are
- * gridX and gridY.
- */
- void lineupIcons();
-
- /**
- * Line up the icons to a regular grid horizontally or vertically.
- *
- * @param arrangement the arrangement to use (QIconView::LeftToRight
- * for a horizontal arrangement and QIconView::TopToBottom
- * for vertical)
- */
- void lineupIcons( QIconView::Arrangement arrangement );
-
- /**
- * Sets the icons of all items, and stores the @p size
- * This doesn't touch thumbnails, except if @p stopImagePreviewFor is set.
- * Takes care of the grid, when changing the size.
- *
- * @param size size to use for the icons
- * @param stopImagePreviewFor set to a list of mimetypes which should be made normal again.
- * For instance "text/plain,image/wmf".
- * Can be set to "*" for "all mimetypes" and to "image/"+"*" for "all images".
- */
- void setIcons( int size, const QStringList& stopImagePreviewFor = QStringList() );
-
- /**
- * Called on databaseChanged
- */
- void refreshMimeTypes();
-
- int iconSize() { return m_size; }
-
- void calculateGridX();
- /**
- * The horizontal distance between two icons
- * (whether or not a grid has been given to QIconView)
- */
- int gridXValue() const;
-
- /**
- * Calculate the geometry of the fixed grid that is used to line up the
- * icons, for example when using the lineupIcons() method.
- *
- * @param x
- * @param y
- * @param dx Cell width
- * @param dy Cell height
- * @param nx Number of columns
- * @param ny Number of rows
- */
- void gridValues( int* x, int* y, int* dx, int* dy, int* nx, int* ny );
-
- /**
- * Start generating the previews.
- * @param ignored this parameter is probably ignored
- * @param force if true, all files are looked at.
- * Otherwise, only those which are not a thumbnail already.
- *
- * @todo figure out the parameter meanings again
- */
- void startImagePreview( const QStringList &ignored, bool force );
- void stopImagePreview();
- bool isPreviewRunning() const;
- // unused
- void setThumbnailPixmap( KFileIVI * item, const QPixmap & pixmap );
- void disableSoundPreviews();
-
- void setURL ( const KURL & kurl );
- // ### KDE4: make const
- const KURL & url() { return m_url; }
- QString urlString() const { return m_url.url(); }
- void setRootItem ( const KFileItem * item ) { m_rootItem = item; }
-
- /**
- * Get list of selected KFileItems
- */
- KFileItemList selectedFileItems();
-
- void setItemColor( const QColor &c );
- QColor itemColor() const;
-
- virtual void cutSelection();
- virtual void copySelection();
- virtual void pasteSelection();
- virtual KURL::List selectedUrls(); // KDE4: remove virtual + add const
- enum UrlFlags { UserVisibleUrls = 0, MostLocalUrls = 1 };
- KURL::List selectedUrls( UrlFlags flags ) const; // KDE4: merge with above, default is == UserVisibleUrls
- void paste( const KURL &url );
-
- bool sortDirectoriesFirst() const;
- void setSortDirectoriesFirst( bool b );
-
- void setCaseInsensitiveSort( bool b );
- bool caseInsensitiveSort() const;
-
- /**
- * Cache of the dragged URLs over the icon view, used by KFileIVI
- */
- const KURL::List & dragURLs() { return m_lstDragURLs; }
-
- /**
- * Reimplemented from QIconView
- */
- virtual void clear();
-
- /**
- * Reimplemented from QIconView
- */
- virtual void takeItem( QIconViewItem *item );
-
- /**
- * Reimplemented from QIconView to take into account iconArea.
- */
- virtual void insertInGrid( QIconViewItem *item );
-
- /**
- * Reimplemented from QIconView to update the gridX
- */
- virtual void setItemTextPos( ItemTextPos pos );
-
- /**
- * Give feedback when item is activated.
- */
- virtual void visualActivate(QIconViewItem *);
-
- bool isDesktop() const { return m_bDesktop; }
-
- /**
- * Provided for KDesktop.
- */
- virtual void setWallpaper(const KURL&) { }
-
- bool maySetWallpaper();
- void setMaySetWallpaper(bool b);
-
- void disableIcons( const KURL::List & lst );
-
- QString iconPositionGroupPrefix() const { return m_iconPositionGroupPrefix; }
- QString dotDirectoryPath() const { return m_dotDirectoryPath; }
-
- void setPreviewSettings(const QStringList& mimeTypes);
- const QStringList& previewSettings();
- void setNewURL( const QString& url );
-
- public slots:
- /**
- * Checks the new selection and emits enableAction() signals
- */
- virtual void slotSelectionChanged();
-
- void slotSaveIconPositions();
-
- void renameSelectedItem();
- void renameCurrentItem();
-
- void slotToolTipPreview( const KFileItem *, const QPixmap & ); // ### unused - remove for KDE4
- void slotToolTipPreviewResult() ; // ### unused - remove for KDE4
-
- signals:
- /**
- * For cut/copy/paste/move/delete (see kparts/browserextension.h)
- */
- void enableAction( const char * name, bool enabled );
-
- void dropped();
- void imagePreviewFinished();
-
- void incIconSize();
- void decIconSize();
-
- /**
- * We need to track drag in icon views for the spring loading folders
- */
- void dragEntered( bool accepted );
- void dragLeft();
-
- void dragMove( bool accepted );
- /**
- * Emited after the dropped() event. This way we know when the
- * drag'n'drop is really finished.
- */
- void dragFinished();
-
- protected slots:
- virtual void slotDropped( QDropEvent *e, const QValueList<QIconDragItem> & );
-
- void slotItemRenamed(QIconViewItem *item, const QString &name);
-
- void slotIconChanged(int);
- void slotOnItem(QIconViewItem *);
- void slotOnViewport();
- void slotStartSoundPreview();
- void slotPreview(const KFileItem *, const QPixmap &);
- void slotPreviewResult();
-
- void slotMovieUpdate( const QRect& rect );
- void slotMovieStatus( int status );
- void slotReenableAnimation();
-
- void slotAboutToCreate(const QPoint &pos, const QValueList<KIO::CopyInfo> &files);
- void doubleClickTimeout();
-
- protected:
- virtual QDragObject *dragObject();
- KonqIconDrag *konqDragObject( QWidget * dragSource = 0L );
- bool mimeTypeMatch( const QString& mimeType, const QStringList& mimeList ) const;
-
- virtual void drawBackground( QPainter *p, const QRect &r );
- /**
- * r is the rectangle which you want to paint from the background.
- * pt is the upper left point in the painter device where you want to paint
- * the rectangle r.
- */
- virtual void drawBackground( QPainter *p, const QRect &r,
- const QPoint &pt );
- virtual void contentsDragEnterEvent( QDragEnterEvent *e );
- virtual void contentsDragLeaveEvent( QDragLeaveEvent *e );
- virtual void contentsDragMoveEvent( QDragMoveEvent *e );
- virtual void contentsDropEvent( QDropEvent *e );
- virtual void contentsMousePressEvent( QMouseEvent *e );
- virtual void contentsMouseReleaseEvent ( QMouseEvent * e );
- virtual void contentsMouseMoveEvent( QMouseEvent *e );
- virtual void backgroundPixmapChange( const QPixmap & );
- virtual void wheelEvent( QWheelEvent* );
- virtual void leaveEvent( QEvent *e );
-
- void readAnimatedIconsConfig();
- void mousePressChangeValue();
-
- bool boostPreview() const;
- int previewIconSize( int size ) const;
- int largestPreviewIconSize( int size ) const;
- bool canPreview( KFileItem* item );
- void updatePreviewMimeTypes();
-
- private:
- KURL m_url;
- const KFileItem * m_rootItem;
-
- KURL::List m_lstDragURLs;
-
- int m_size;
-
- /** Konqueror settings */
- KonqFMSettings * m_pSettings;
-
- bool m_bMousePressed;
- QPoint m_mousePos;
-
- QColor iColor;
-
- bool m_bSortDirsFirst;
-
- QString m_iconPositionGroupPrefix;
- QString m_dotDirectoryPath;
-
- int m_LineupMode;
- QRect m_IconRect;
-
- bool m_bDesktop;
- bool m_bSetGridX;
-
- private:
- struct KonqIconViewWidgetPrivate *d;
-
- };
-
- #endif
-